/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pak;

import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * @author Radosław Łańcucki, Marcin Sobejko, Paweł Sitarz, Narcyz Owsiany
 * @version 1.0
 * Klasa odpowiedzialna za logowanie do aplikacji
 * 
 */
public class CSystemLogowania 
{
    private boolean zalogowany = false;
    private String blad = null;
    private String login = null;
    private CUprawnieniaUzytkownika uprawnieniaUzytkownika = null;
    private CManagerBazyDanych managerBazy = null;
    private CSterownikMSSqlServer protokol = null;
    
    public CSystemLogowania()
    {
        this.protokol = new CSterownikMSSqlServer("localhost:1433", "master", "RADEK-NB");
        this.managerBazy = new CManagerBazyDanych(this.protokol);
    }
    
    public void weryfikujUzytkownika(String login, String haslo)
    {
        String zapytanie = "SELECT COUNT(Id_uzytkownik) "
                + "FROM Uzytkownicy "
                + "WHERE Login_uzytkownik = '" + login + "' "
                + "AND Haslo_uzytkownik = '" + haslo + "';";
        
        this.managerBazy.wykonajZapytanie(zapytanie);
        
        try
        {
            ResultSet rs = this.managerBazy.pobierzRezultatZapytania();
            int rowCount = 0;
            
            while(rs.next())
                rowCount = Integer.parseInt(rs.getString(1));

            if (rowCount == 1)
                this.zaloguj(login, haslo);
            else
                blad = "Użytkownik o podanym loginie i/lub haśle nie istnieje";
        }
        catch(SQLException sqlex)
        {
            blad = "Błąd połączenia z bazą danych SQL";
        }
    }
    
    public CUprawnieniaUzytkownika pobierzUprawnieniaUzytkownika()
    {
        return this.uprawnieniaUzytkownika;
    }
    
    public String pobierzLogin()
    {
        return this.login;
    }
    
    public void zaloguj(String login, String haslo)
    {
        String zapytanie = "SELECT Id_uzytkownik, Rodzaj_uzytkownik "
                + "FROM Uzytkownicy "
                + "WHERE Login_uzytkownik = '" + login + "' "
                + "AND Haslo_uzytkownik = '" + haslo + "';";
        
        this.managerBazy.wykonajZapytanie(zapytanie);
        
        try
        {
            ResultSet rs = this.managerBazy.pobierzRezultatZapytania();
            int uzytkownik_id = -1, uzytkownik_rodzaj = -1;
            
            while(rs.next())
            {
                uzytkownik_id = Integer.parseInt(rs.getString(1));
                uzytkownik_rodzaj = Integer.parseInt(rs.getString(2));
            }
            
            if (uzytkownik_id != -1 && uzytkownik_rodzaj != -1)
            {
                switch(uzytkownik_rodzaj)
                {
                    case 0:
                        this.uprawnieniaUzytkownika = CUprawnieniaUzytkownika.UZYTKOWNIK;
                        break;
                    case 1:
                        this.uprawnieniaUzytkownika = CUprawnieniaUzytkownika.PRACOWNIK;
                        break;
                    case 2:
                        this.uprawnieniaUzytkownika = CUprawnieniaUzytkownika.ADMIN;
                        break;
                }
                this.zalogowany = true;
                this.login = login;
            }
            else
                this.blad = "Nieudane logowanie";
        }
        catch(SQLException sqlex)
        {
            this.blad = "Błąd połączenia z bazą danych SQL";
        }
    }
    
    public boolean czyZalogowany()
    {
        return this.zalogowany;
    }
    
    public void wyloguj()
    {
        this.login = null;
        this.uprawnieniaUzytkownika = null;
        this.zalogowany = false;
    }
    
    public String pobierzBlad()
    {
        return this.blad;
    }
}

